﻿//ChartElement.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Xaml
{
	using System;
	using System.ComponentModel;

	using Ecng.Common;
	using Ecng.Serialization;

	/// <summary>
	/// Интерфейс, описывающий элемент графика (индикатор, свечка и т.д.).
	/// </summary>
	public interface IChartElement : ICloneable<IChartElement>
	{
		/// <summary>
		/// Уникальный идентификатор.
		/// </summary>
		Guid Id { get; }

		/// <summary>
		/// Отображать ли легенду на графике.
		/// </summary>
		bool IsLegend { get; }
	}

	/// <summary>
	/// Базовые класс, описывающий элемент графика (индикатор, свечка и т.д.).
	/// </summary>
	/// <typeparam name="T">Тип элемента графика.</typeparam>
	public abstract class ChartElement<T> : ChartPart<T>, IChartElement
		where T : ChartElement<T>
	{
		internal const string ViewCategory = "Вид";

		/// <summary>
		/// Инициализировать <see cref="ChartElement{T}"/>.
		/// </summary>
		protected ChartElement()
		{
		}

		/// <summary>
		/// Отображать ли легенду на графике.
		/// </summary>
		[DisplayName("Легенда")]
		[Description("Отображать ли легенду на графике.")]
		[Category("Основные")]
		public bool IsLegend { get; set; }

		/// <summary>
		/// Загрузить настройки.
		/// </summary>
		/// <param name="storage">Хранилище настроек.</param>
		public override void Load(SettingsStorage storage)
		{
			base.Load(storage);
			IsLegend = storage.GetValue<bool>("IsLegend");
		}

		/// <summary>
		/// Сохранить настройки.
		/// </summary>
		/// <param name="storage">Хранилище настроек.</param>
		public override void Save(SettingsStorage storage)
		{
			base.Save(storage);
			storage.SetValue("IsLegend", IsLegend);
		}

		/// <summary>
		/// Заполнить копию элемента.
		/// </summary>
		/// <param name="elem">Копия.</param>
		/// <returns>Копия.</returns>
		protected override T FillClone(T elem)
		{
			base.FillClone(elem);
			elem.IsLegend = IsLegend;
			return elem;
		}

		IChartElement ICloneable<IChartElement>.Clone()
		{
			return Clone();
		}
	}
}